﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CLM.Gestao;

namespace CLM.Gestao.Relatorios.UI
{
    public partial class PNLCustosDespesas : Form
    {
        #region Construtor

        public PNLCustosDespesas(int pAno, int pMes, Microsoft.Office.Interop.Excel.Application pApplication)
        {
            try
            {
                InitializeComponent();

                ExcelAppication = pApplication;

                var pos = this.PointToScreen(lblTitulo.Location);
                pos = picTitulo.PointToClient(pos);
                lblTitulo.Parent = picTitulo;
                lblTitulo.Location = pos;
                lblTitulo.BackColor = Color.Transparent;

                InicializaCombos(pAno, pMes);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Construtor

        private Microsoft.Office.Interop.Excel.Application ExcelAppication = null;

        #region Eventos

        private void btnExportar_Click(object sender, EventArgs e)
        {
            Exportar();
        }

        #endregion Eventos

        #region Métodos Privados

        private void InicializaCombos(int pAno, int pMes)
        {
            // Carrega o combo de Período
            Administrador.BLL.Periodo Periodo = new Administrador.BLL.Periodo();
            cboPeriodo.DataSource = Periodo.GetItens(new Administrador.BLL.Periodo.Lista() { AnoPeriodo = pAno });
            cboPeriodo.DisplayMember = "DescricaoPeriodo";
            cboPeriodo.ValueMember = "MesPeriodo";

            cboPeriodo.SelectedValue = pMes;
        }

        private void ValidarInterface()
        {
            if (string.IsNullOrWhiteSpace(cboPeriodo.Text)) throw new Exception("O período é obrigatório.");
        }

        private void Exportar()
        {
            try
            {
                BLL.Relatorio Relatorio = new BLL.Relatorio();

                // Recupera o período selecionado
                List<int> Periodos = new List<int>();
                if (chkYTD.Checked)
                {
                    for (int i = cboPeriodo.SelectedIndex; i >= 0; i--)
                    {
                        Periodos.Add(((Administrador.BLL.Periodo.Itens)cboPeriodo.Items[i]).IdPeriodo);
                    }
                }
                else
                {
                    Periodos.Add(((Administrador.BLL.Periodo.Itens)cboPeriodo.SelectedItem).IdPeriodo);
                }

                // Exporta os dados de P&L
                var ListaPNL = Relatorio.GerarRelatorioPNLCustosDespesas(Periodos.ToArray());

                

                string[] Cabecalho = { "Nome do Produto Família", "Standard Costs - Intra Group", "Standard COGS - Third Party", "PPV  IG", "PPV  Third party", "Inventory adjustments & bad goods", "Freight, custom, insurance", "Other COGS", "Third party royalties", "L'OREAL Royalties", "Total Variable Marketing Input", "Internal Direct selling costs", "Commission to brokers and agents (non-customers)", "Fixed Marketing Expenses", "Warehouse and shipping", "IT costs", "Finance costs", "HR costs", "Legal and Management costs", "Other G&A costs", "Bad debts", "Other Operating Expenses / Income", "Other Regulatory affairs costs", "Other Medical affairs costs" };
                CLM.Gestao.Relatorio.Excel<BLL.Relatorio.ListaDespesasCustos>.TipoRelatorio = CLM.Gestao.Relatorio.TipoRelatorio.Simples;
                CLM.Gestao.Relatorio.Excel<BLL.Relatorio.ListaDespesasCustos>.Gerar(ListaPNL, Cabecalho, "P&L de Custos e Despesas por Família de Produtos", "P&LCustosDespesas", ExcelAppication);
            }
            catch (Exception ex)
            {
                Exportacao.Texto.LogErro(ex, "P&L de Custos e Despesas");
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Métodos Privados
    }
}